## Что нужно сделать
Реализовать web-приложение для работы со счетами клиента. Клиент должен иметь возможность:

1. Пополнить счет.
2. Снять со счета.
3. Получить инфомацию по конкрентому счету.
4. Получить инфомацию по счетам на основе каких-то параметров.
5. Открыть счет.
6. Закрыть счет.

_Ввел сущность статуса. Закрытие счета != удаление счета._

_В постановке задачи ничего конкретного не говорится про пользователей, которым принадлежат эти счета. Но сделать приложение [1 контроллер - 1 сервис - 1 репозиторий] наверное было бы слишком просто. Плюс последние 20 минут интервью мы говорили про вложенные/зависимые сущности. Итого было принято решение ввести верхнеуровневую сущность пользователя._
_В маппингах для пополнения и снятия пользователь не используется, счет известен, счет без пользователя не бывает. Да, нет единообразия, плохо_
_Плюс накинул некоторую бизнес логику_

Внешний интерфейс приложения представлен в виде HTTP API.

Если необходимо тело запроса и ответа должны передаваться в формате JSON.<br>
Ожидаемые коды HTTP ответов:
1. 200 OK

_Успешный ответ контроллера. Возможно, здесь следовало ввести ResponseEntity, но формально и так соответствует_

2. 4xx

_Все кастомные исключения_
_Вероятно, не все типы исключений на самом деле нужны, часть можно заменить валидацией параметров в контроллере. Например, ввод только цифр в качестве userId и accountId_
3. 5xx

_Все, что не перехватили кастомные исключения_

## Обязательные требования:
1. Реализовано на Java+SpringBoot.

_Да_

2. без UI.

_Да_

3. СУБД Postgre. Поднимается рядом с приложением в докер-контейнере.

Полностью докеризировал приложение по аналогии с https://www.baeldung.com/spring-boot-postgresql-docker
Смотреть ниже раздел "Запуск приложения в Docker".

4. Основные компоненты приложения покрыты unit-тестами.

Добавлены интеграционные тесты:
src/test/java/com/raiffeisen/banking/controller/ApplicationControllerIntegrationTest.java

Исправлена пара багов + исключениям заданы конкретные HTTP статусы.
Отключены миграции flyway по наполнению БД (V20, V21 переименованы), чтобы тесты не зависели от скриптов наполнения.

5. Flyway для версионирования схемы базы данных.

_Да. Если нужно, чтобы скрипты flyway вернули БД в исходное состояние, предварительно запустить resources/sql/drop_all.sql_

6. Применение REST практик.

_Да_

7. Maven

_Да_ 

## Запуск приложения в Docker
В терминале в корне проекта выполнить:
```
./mvnw clean package
docker-compose up -d
```
При повторной попытке пройти тесты нужно:
- дропнуть БД, т. к. прокрутились ID;
- дропнуть информацию о миграциях, чтобы они снова отработали.
```
src/main/resources/sql/drop_all.sql
```
При повторной попытке докеризировать нужно удалить в докере image "docker-spring-boot-postgres:latest"

Для проверки можно отправить API запрос для получения всех счетов пользователей, в логине которых содержится строка "a" (пользоват):
```
localhost:8080/users?login=a
```
Выдаст пустой массив, т. к. БД теперь зачищается в tearDown() методе интеграционных тестов.